var oneone = (Mario.oneone = function () {
    //The things that need to be passed in are basically just dependent on what
    //tileset we're in, so it makes more sense to just make one variable for that, so
    //TODO: put as much of this in the Level object definition as possible.
    level = new Mario.Level({
        playerPos: [56, 192],
        loader: Mario.oneone,
        background: "#7974FF",
        scrolling: true,
        invincibility: [144, 192, 240],
        exit: 204,
        floorSprite: new Mario.Sprite("sprites/tiles.png", [0, 0], [16, 16], 0),
        cloudSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [0, 320],
            [48, 32],
            0,
        ),
        wallSprite: new Mario.Sprite("sprites/tiles.png", [0, 16], [16, 16], 0),
        brickSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [16, 0],
            [16, 16],
            0,
        ),
        brickBounceSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [32, 0],
            [16, 16],
            0,
        ),
        rubbleSprite: function () {
            return new Mario.Sprite(
                "sprites/items.png",
                [64, 0],
                [8, 8],
                3,
                [0, 1],
            );
        },
        ublockSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [48, 0],
            [16, 16],
            0,
        ),
        superShroomSprite: new Mario.Sprite(
            "sprites/items.png",
            [0, 0],
            [16, 16],
            0,
        ),
        fireFlowerSprite: new Mario.Sprite(
            "sprites/items.png",
            [0, 32],
            [16, 16],
            20,
            [0, 1, 2, 3],
        ),
        starSprite: new Mario.Sprite(
            "sprites/items.png",
            [0, 48],
            [16, 16],
            20,
            [0, 1, 2, 3],
        ),
        pipeLEndSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [0, 128],
            [16, 16],
            0,
        ),
        pipeREndSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [16, 128],
            [16, 16],
            0,
        ),
        pipeLMidSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [0, 144],
            [16, 16],
            0,
        ),
        pipeRMidSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [16, 144],
            [16, 16],
            0,
        ),

        pipeUpMid: new Mario.Sprite("sprites/tiles.png", [0, 144], [32, 16], 0),
        pipeSideMid: new Mario.Sprite(
            "sprites/tiles.png",
            [48, 128],
            [16, 32],
            0,
        ),
        pipeLeft: new Mario.Sprite("sprites/tiles.png", [32, 128], [16, 32], 0),
        pipeTop: new Mario.Sprite("sprites/tiles.png", [0, 128], [32, 16], 0),
        qblockSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [384, 0],
            [16, 16],
            8,
            [0, 0, 0, 0, 1, 2, 1],
        ),
        bcoinSprite: function () {
            return new Mario.Sprite(
                "sprites/items.png",
                [0, 112],
                [16, 16],
                20,
                [0, 1, 2, 3],
            );
        },
        cloudSprites: [
            new Mario.Sprite("sprites/tiles.png", [0, 320], [16, 32], 0),
            new Mario.Sprite("sprites/tiles.png", [16, 320], [16, 32], 0),
            new Mario.Sprite("sprites/tiles.png", [32, 320], [16, 32], 0),
        ],
        hillSprites: [
            new Mario.Sprite("sprites/tiles.png", [128, 128], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [144, 128], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [160, 128], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [128, 144], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [144, 144], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [160, 144], [16, 16], 0),
        ],
        bushSprite: new Mario.Sprite(
            "sprites/tiles.png",
            [176, 144],
            [48, 16],
            0,
        ),
        bushSprites: [
            new Mario.Sprite("sprites/tiles.png", [176, 144], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [192, 144], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [208, 144], [16, 16], 0),
        ],
        goombaSprite: function () {
            return new Mario.Sprite(
                "sprites/enemy.png",
                [0, 16],
                [16, 16],
                3,
                [0, 1],
            );
        },
        koopaSprite: function () {
            return new Mario.Sprite(
                "sprites/enemy.png",
                [96, 0],
                [16, 32],
                2,
                [0, 1],
            );
        },
        flagPoleSprites: [
            new Mario.Sprite("sprites/tiles.png", [256, 128], [16, 16], 0),
            new Mario.Sprite("sprites/tiles.png", [256, 144], [16, 16], 0),
            new Mario.Sprite("sprites/items.png", [128, 32], [16, 16], 0),
        ],
    });
    ground = [
        [0, 69],
        [71, 86],
        [89, 153],
        [155, 212],
    ];
    player.pos[0] = level.playerPos[0];
    player.pos[1] = level.playerPos[1];
    vX = 0;

    //build THE GROUND
    ground.forEach(function (loc) {
        level.putFloor(loc[0], loc[1]);
    });

    //build scenery
    clouds = [
        [7, 3],
        [19, 2],
        [56, 3],
        [67, 2],
        [87, 2],
        [103, 2],
        [152, 3],
        [163, 2],
        [200, 3],
    ];
    clouds.forEach(function (cloud) {
        level.putCloud(cloud[0], cloud[1]);
    });

    twoClouds = [
        [36, 2],
        [132, 2],
        [180, 2],
    ];
    twoClouds.forEach(function (cloud) {
        level.putTwoCloud(cloud[0], cloud[1]);
    });

    threeClouds = [
        [27, 3],
        [75, 3],
        [123, 3],
        [171, 3],
    ];
    threeClouds.forEach(function (cloud) {
        level.putThreeCloud(cloud[0], cloud[1]);
    });

    bHills = [0, 48, 96, 144, 192];
    bHills.forEach(function (hill) {
        level.putBigHill(hill, 12);
    });

    sHills = [16, 64, 111, 160];
    sHills.forEach(function (hill) {
        level.putSmallHill(hill, 12);
    });

    bushes = [23, 71, 118, 167];
    bushes.forEach(function (bush) {
        level.putBush(bush, 12);
    });

    twoBushes = [41, 89, 137];
    twoBushes.forEach(function (bush) {
        level.putTwoBush(bush, 12);
    });

    threeBushes = [11, 59, 106];
    threeBushes.forEach(function (bush) {
        level.putThreeBush(bush, 12);
    });

    //interactable terrain
    level.putQBlock(16, 9, new Mario.Bcoin([256, 144]));
    level.putBrick(20, 9, null);
    level.putQBlock(21, 9, new Mario.Mushroom([336, 144]));
    level.putBrick(22, 9, null);
    level.putQBlock(22, 5, new Mario.Bcoin([352, 80]));
    level.putQBlock(23, 9, new Mario.Bcoin([368, 144]));
    level.putBrick(24, 9, null);
    level.putPipe(28, 13, 2);
    level.putPipe(38, 13, 3);
    level.putPipe(46, 13, 4);
    level.putRealPipe(57, 9, 4, "DOWN", Mario.oneonetunnel);
    level.putBrick(77, 9, null);
    level.putQBlock(78, 9, new Mario.Mushroom([1248, 144]));
    level.putBrick(79, 9, null);
    level.putBrick(80, 5, null);
    level.putBrick(81, 5, null);
    level.putBrick(82, 5, null);
    level.putBrick(83, 5, null);
    level.putBrick(84, 5, null);
    level.putBrick(85, 5, null);
    level.putBrick(86, 5, null);
    level.putBrick(87, 5, null);
    level.putBrick(91, 5, null);
    level.putBrick(92, 5, null);
    level.putBrick(93, 5, null);
    level.putQBlock(94, 5, new Mario.Bcoin([1504, 80]));
    level.putBrick(94, 9, null);
    level.putBrick(100, 9, new Mario.Star([1600, 144]));
    level.putBrick(101, 9, null);
    level.putQBlock(105, 9, new Mario.Bcoin([1680, 144]));
    level.putQBlock(108, 9, new Mario.Bcoin([1728, 144]));
    level.putQBlock(108, 5, new Mario.Mushroom([1728, 80]));
    level.putQBlock(111, 9, new Mario.Bcoin([1776, 144]));
    level.putBrick(117, 9, null);
    level.putBrick(120, 5, null);
    level.putBrick(121, 5, null);
    level.putBrick(122, 5, null);
    level.putBrick(123, 5, null);
    level.putBrick(128, 5, null);
    level.putQBlock(129, 5, new Mario.Bcoin([2074, 80]));
    level.putBrick(129, 9, null);
    level.putQBlock(130, 5, new Mario.Bcoin([2080, 80]));
    level.putBrick(130, 9, null);
    level.putBrick(131, 5, null);
    level.putWall(134, 13, 1);
    level.putWall(135, 13, 2);
    level.putWall(136, 13, 3);
    level.putWall(137, 13, 4);
    level.putWall(140, 13, 4);
    level.putWall(141, 13, 3);
    level.putWall(142, 13, 2);
    level.putWall(143, 13, 1);
    level.putWall(148, 13, 1);
    level.putWall(149, 13, 2);
    level.putWall(150, 13, 3);
    level.putWall(151, 13, 4);
    level.putWall(152, 13, 4);
    level.putWall(155, 13, 4);
    level.putWall(156, 13, 3);
    level.putWall(157, 13, 2);
    level.putWall(158, 13, 1);
    level.putPipe(163, 13, 2);
    level.putBrick(168, 9, null);
    level.putBrick(169, 9, null);
    level.putQBlock(170, 9, new Mario.Bcoin([2720, 144]));
    level.putBrick(171, 9, null);
    level.putPipe(179, 13, 2);
    level.putWall(181, 13, 1);
    level.putWall(182, 13, 2);
    level.putWall(183, 13, 3);
    level.putWall(184, 13, 4);
    level.putWall(185, 13, 5);
    level.putWall(186, 13, 6);
    level.putWall(187, 13, 7);
    level.putWall(188, 13, 8);
    level.putWall(189, 13, 8);
    level.putFlagpole(198);

    //and enemies
    level.putGoomba(22, 12);
    level.putGoomba(40, 12);
    level.putGoomba(50, 12);
    level.putGoomba(51, 12);
    level.putGoomba(82, 4);
    level.putGoomba(84, 4);
    level.putGoomba(100, 12);
    level.putGoomba(102, 12);
    level.putGoomba(114, 12);
    level.putGoomba(115, 12);
    level.putGoomba(122, 12);
    level.putGoomba(123, 12);
    level.putGoomba(125, 12);
    level.putGoomba(126, 12);
    level.putGoomba(170, 12);
    level.putGoomba(172, 12);
    level.putKoopa(35, 11);

    music.underground.pause();
    // music.overworld.currentTime = 0;
    music.overworld.play();
});
